package service;

import util.Result;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import util.StringUtil;
import util.UUIDUtil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.List;

public class UploadService {

    /**
     * 执行文件上传
     * @param request
     * @param response
     */
    public void upload(HttpServletRequest request, HttpServletResponse response){
        try {
            // 执行文件上传
            // 创建一个文件上传的临时文件工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 实例化上传对象
            ServletFileUpload upload = new ServletFileUpload(factory);
            // 设置参数 => 单个文件2M
            upload.setFileSizeMax(1024*1024*2);

            // 解析请求中的数据
            List<FileItem> fileItems = upload.parseRequest(request);
            // 遍历
            // 需要保存的路径
            String path = "";
            for (FileItem item : fileItems) {
                // 判断是否是文件对象
                if (!item.isFormField()) {
                    // 这是一个文件
                    // 获取上传文件的名字
                    String name = item.getName();
                    // xx.x.jpg
                    // 判断后缀
                    if (!StringUtil.checkExt("jpg|png|jpeg|gif", name)) {
                        item.delete();
                        Result.response(1001, "文件名不符合规则!", response);
                        return;
                    }

                    // 重新生成一个当前系统中唯一的文件名
                    //防止用户上传同一张图片
                    String uid = UUIDUtil.getUid();
                    String newFileName = uid+"."+StringUtil.getExt(name);
                    // 生成一个时间的文件夹  /2021/08/08
                    String datePath = StringUtil.getDatePath();
                    //准备一个上传路径
                    String savePath = "E:/桌面/aa毕业/fsl/restaurant/upload/";
                    savePath = savePath+datePath;
                    StringUtil.createDirs(savePath);
                    // 准备一个文件File抽象对象
                    File file = new File(savePath, newFileName);
                    // 上传
                    item.write(file);
                    // 给保存的路径赋值
                    path = datePath+"/"+newFileName;
                    // 删除临时文件
                    item.delete();
                }
            }
            Result.response(200, "上传成功", response, path);

        } catch (FileUploadException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


}
